Ana içeriğe geç

Trip Report Test Senaryoları

Durum

Bu doküman, Form Builder'ın Trip Report özelinde test senaryolarını ve kabul kriterlerini detaylandırır.

Dynamic Schema Tests

Role-Based Schema Generation

describe("Dynamic Schema Generation", () => {
const testCases = [
{
role: "manager",
expectedFields: ["description", "amount", "approver"],
unexpectedFields: ["status"],
},
{
role: "employee",
expectedFields: ["description", "amount"],
unexpectedFields: ["approver"],
},
];

testCases.forEach(({ role, expectedFields, unexpectedFields }) => {
it(`generates correct fields for ${role}`, () => {
const context = { userRole: role };
const schema = generateTripReportSchema(context);

expectedFields.forEach((field) => {
expect(schema.fields).toContainField(field);
});

unexpectedFields.forEach((field) => {
expect(schema.fields).not.toContainField(field);
});
});
});
});

Company Settings Tests

describe("Company Settings Integration", () => {
it("applies strict validation when enabled", () => {
const context = {
companySettings: { strictMode: true },
};

const schema = generateTripReportSchema(context);
const validation = schema.fields.find(
(f) => f.name === "description"
).validation;

expect(validation.minLength).toBe(10);
});
});

Custom Component Tests

Component Registry

describe("Component Registry", () => {
it("registers and resolves custom components", () => {
const registry = useComponentRegistry();
registry.register("customExpense", CustomExpenseComponent);

const resolved = registry.resolve("customExpense");
expect(resolved).toBe(CustomExpenseComponent);
});
});

Custom Component Rendering

describe("Custom Component Integration", () => {
it("renders custom expense component", () => {
const { getByTestId } = render(
<FormBuilder schema={tripReportSchema} componentRegistry={mockRegistry} />
);

expect(getByTestId("custom-expense")).toBeInTheDocument();
});
});

Performance Tests

Schema Generation Performance

describe("Schema Generation Performance", () => {
it("generates schema within performance budget", () => {
const start = performance.now();
generateTripReportSchema(mockContext);
const duration = performance.now() - start;

expect(duration).toBeLessThan(50); // 50ms budget
});
});

Component Resolution Performance

describe("Component Resolution Performance", () => {
it("resolves components within performance budget", () => {
const registry = useComponentRegistry();
const start = performance.now();
registry.resolve("customExpense");
const duration = performance.now() - start;

expect(duration).toBeLessThan(5); // 5ms budget
});
});

Integration Tests

Full Form Flow

describe("Trip Report Form Flow", () => {
it("completes full submission flow", async () => {
const { getByLabelText, getByRole } = render(
<TripReportForm context={mockContext} />
);

// Fill form
await userEvent.type(
getByLabelText("description"),
"Business lunch with client"
);

await userEvent.type(getByLabelText("amount"), "150.00");

// Custom component interaction
await userEvent.click(getByTestId("custom-expense"));
await userEvent.selectOptions(getByLabelText("category"), "meal");

// Submit
await userEvent.click(getByRole("button", { name: /submit/i }));

// Assertions
expect(mockSubmit).toHaveBeenCalledWith({
description: "Business lunch with client",
amount: 150.0,
category: "meal",
});
});
});

Edge Cases

Context Changes

describe("Context Changes", () => {
it("updates form when role changes", async () => {
const { rerender, queryByLabelText } = render(
<TripReportForm context={{ userRole: "employee" }} />
);

expect(queryByLabelText("approver")).not.toBeInTheDocument();

rerender(<TripReportForm context={{ userRole: "manager" }} />);

expect(queryByLabelText("approver")).toBeInTheDocument();
});
});

Error Handling

describe("Error Handling", () => {
it("handles schema generation errors gracefully", () => {
const { getByText } = render(<TripReportForm context={invalidContext} />);

expect(getByText(/error generating form/i)).toBeInTheDocument();
});
});

Kabul Kriterleri

Teknik Kriterler

  • Tüm test senaryoları başarılı
  • Performance metrikleri karşılanıyor
  • Edge case'ler kapsanmış
  • Error handling testleri geçiyor

İş Kriterleri

  • Farklı roller için doğru form görüntüleme
  • Custom component'ler doğru çalışıyor
  • Validasyonlar şirket ayarlarına uygun
  • Form tamamlanma oranı hedefi karşılanıyor
Test Önceliklendirme
  1. Dynamic schema generation testleri
  2. Custom component integration testleri
  3. Performance testleri
  4. Edge case ve error handling testleri